package com.summer.framework.core.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Description: md5工具类
 * @auther Ice Yang
 * Date 2025/8/12 14:38
 */
public class MD5Util {

    private static final String MD5 = "MD5";

    /**
     * 生成字符串的MD5值（32位小写）
     * @param input 原始字符串
     * @return MD5哈希值
     */
    public static String md5(String input) {
        if (input == null || input.isEmpty()) {
            return "";
        }
        try {
            // 创建MessageDigest实例并指定MD5算法
            MessageDigest md = MessageDigest.getInstance(MD5);
            // 计算MD5哈希值
            byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8));
            // 将字节数组转换为十六进制字符串
            return bytesToHex(digest);
        } catch (NoSuchAlgorithmException e) {
            // 正常情况下不会发生，因为MD5是Java标准算法
            throw new RuntimeException("MD5 algorithm not available", e);
        }
    }

    /**
     * 将字节数组转换为十六进制字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

}
